home *** CD-ROM | disk | FTP | other *** search
Lex Description | 2002-11-17 | 4.0 KB | 143 lines |
- %{
- /*
- * Copyright (C) 1999, 2000, 2001 Lorenzo Bettini <bettini@gnu.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
- static int lineno = 1 ; /* number of scanned lines */
- //char linebuf[1024] ; /* current code line in the source */
- //int tokenpos = 0 ; /* current token position in the current line */
-
- //#include "tags.h"
- //#include "tokens.h"
- //#include "colors.h"
-
- #include "genfun.h"
-
- %}
- %option prefix="java_scanner_"
- %option noyywrap
-
- ws [ ]+
- tabs [\t]+
-
- nl \n
- cr \r
- IDE [a-zA-Z_]([a-zA-Z0-9_])*
- wspace [ \t\n\r]
-
- STRING \"[^\"\n]*\"
-
- not_alpha [^a-zA-Z0-9]
-
- %s COMMENT_STATE
- %s SINGLELINE_COMMENT
- %s STRING_STATE
- %s CHAR_STATE
-
- keyword (abstract|assert|break|case|catch|class|const|continue|default|do|else|extends|final|finally|for|goto|if|implements|instanceof|interface|native|new|null|package|private|protected|public|return|static|super|switch|synchronized|throw|throws|this|transient|try|volatile|while)
- basetype (int|byte|boolean|char|long|float|double|short|void)
- symbol [\~\!\%\^\*\(\)\-\+\=\[\]\|\\\:\;\,\.\/\?\&\<\>]
- funccall {IDE}/{wspace}*\(
-
- %%
-
-
-
- \r {}
-
- <INITIAL>"/*" { BEGIN COMMENT_STATE ;
- startComment( yytext ) ;
- }
- <INITIAL>"/*".*"*/" { generateComment( yytext ) ; }
-
-
- <COMMENT_STATE>\n {
- endComment ("");
- ++lineno;
- generateNewLine() ;
- startComment ("");
- /* if we encounter another // during a comment we simply
- treat it as a ordinary string */
- }
- <COMMENT_STATE>"*/" { endComment(yytext) ;
- BEGIN INITIAL ; /* end of the comment */ }
-
- <INITIAL>"//" { BEGIN SINGLELINE_COMMENT ; startComment( yytext ) ; }
- <SINGLELINE_COMMENT>\n {
- BEGIN INITIAL ;
- yyless (0); // put the \n back
- endComment( yytext ) ;
- /* if we encounter another // during a comment we simply
- treat it as a ordinary string */
- }
-
- <INITIAL>\" { BEGIN STRING_STATE ; startString( yytext ); }
- <STRING_STATE>\\\\ { generate_preproc( yytext ) ; }
- <STRING_STATE>"\\\"" { generate_preproc( yytext ) ; }
- <STRING_STATE>\n {
- endString ("");
- ++lineno;
- generateNewLine() ;
- startString ("");
- }
- <STRING_STATE>\" { BEGIN INITIAL ; endString( yytext ) ; }
-
- <INITIAL>\' { BEGIN CHAR_STATE ; startString( yytext ); }
- <CHAR_STATE>\\\\ { generate_preproc( yytext ) ; }
- <CHAR_STATE>"\\\'" { generate_preproc( yytext ) ; }
- <CHAR_STATE>\' { BEGIN INITIAL ; endString( yytext ) ; }
-
- <INITIAL>{keyword} { generateKeyWord( yytext ) ; }
- <INITIAL>{basetype} { generateBaseType( yytext ) ; }
- <INITIAL>{symbol} { generateSymbol( yytext ); }
- <INITIAL>[\{\}] { generateCBracket ( yytext ); }
-
- <INITIAL>0[xX][0-9a-fA-F]* { generateNumber( yytext ) ; }
- <INITIAL>[0-9][0-9]*(\.[0-9]*[eE]?[-+]?[0-9]*)? { generateNumber( yytext ) ; }
-
- <INITIAL>{keyword}/{wspace}*\( { generateKeyWord( yytext ) ; }
- <INITIAL>{basetype}/{wspace}*\( { generateBaseType( yytext ) ; }
- <INITIAL>{funccall} { generateFunction ( yytext ); }
-
- <INITIAL>import { generatePreProc( yytext) ; }
-
- <INITIAL>[a-zA-Z_]([a-zA-Z0-9_])* { generate_normal( yytext ) ; }
-
- \t {
- generateTab() ;
- }
-
- . { generate_preproc( yytext ) ; /* anything else */ }
-
- \n {
- ++lineno;
- generateNewLine() ;
- }
-
- %%
- /*
- void yyerror( char *s ) ;
-
- void yyerror( char *s )
- {
- fprintf( stderr, "%d: %s: %s\n%s\n", lineno, s, yytext, linebuf ) ;
- fprintf( stderr, "%*s\n", tokenpos, "^" ) ;
- }
- */
- /* vim:set ft=flex expandtab cindent tabstop=4 softtabstop=4 shiftwidth=4 textwidth=0: */
-